/**
 * @file STL_FileSystem.h
 * @author Derek Liu (yjkhtddx@sina.com)
 * @brief 
 * @version 0.1
 * @date 2020-09-10
 * 
 * @copyright Copyright Sci-Tech Laboratories (c) 2020
 * 
 */

#ifndef STLFileSystem_h
#define STLFileSystem_h

#include "STL_Tools.h"
#include <dirent.h>
#include <sys/stat.h>
#include <string>
#include <vector>
#include <list>

namespace STL {

//  ---------------------------
//  ==> File
//  ---------------------------

#define STL_SAFE_CLOSE_FILE(fp)             do { if(fp) { fclose(fp); (fp) = nullptr; } } while(0)

/** 创建目录 */
extern int makeDir(std::string dir);
extern int makeDirWithParents(std::string dir);
/** 检测文件是否存在 */
extern bool checkIsFileExsit(std::string fullPath);
/** 文件重命名/移动 */
extern int renameFile(std::string oldfilename,std::string newfilename);
/** 替换文件内容 */
extern bool replaceStringOfFile(std::string strInfo,std::string fullPath,long offset = 0);
/** 写字符串到文件 */
extern bool writeStringToFile(std::string strInfo,std::string fullPath,bool append = false);
/** 读字符串到文件 */
std::string readStringFromFile(std::string fullPath,long offset = 0,long len = 0,long* totle = nullptr);
/** 删除文件 */
extern bool removeFile(std::string fullPath);

// struct STLFile {
//     std::string path;
//     std::string name;
//     struct stat status;
// };
// struct STLDir {
//     std::string path;
//     bool isExist = false;
//     int sort = 0; // 0 原始顺序,1 修改时间,2 大小
//     bool isAsc = true; //ture:ASC(ascend)升序 false:DESC(descend)降序
//     long long size = 0;
//     std::list<STL::STLFile> list;
// };
/** 遍历目录 (目前只是单层目录遍历,只遍历普通类型文件) */
// extern STL::STLDir listDir(std::string path,int sort = 0,bool isAsc = true);

}

#endif /* STLFileSystem_h */
